{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "mindspore_gettingstarted.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "metadata": {
        "id": "bTJ9xtUvNnLV"
      },
      "source": [
        "    !pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.2.0/MindSpore/cpu/ubuntu_x86/mindspore-1.2.0-cp37-cp37m-linux_x86_64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "LrCxyIfKOGRm",
        "outputId": "37ee91ac-39e1-4727-c50c-c6c3dff26051"
      },
      "source": [
        "!python -c \"import mindspore;print(mindspore.__version__)\""
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "1.2.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "YF8nlfIHPPkz",
        "outputId": "c55a2df2-a6d2-4970-b48a-0c12322d95de"
      },
      "source": [
        "!mkdir -p ./datasets/MNIST_Data/train ./datasets/MNIST_Data/test\n",
        "!wget -NP ./datasets/MNIST_Data/train https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/train-labels-idx1-ubyte --no-check-certificate\n",
        "!wget -NP ./datasets/MNIST_Data/train https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/train-images-idx3-ubyte --no-check-certificate\n",
        "!wget -NP ./datasets/MNIST_Data/test https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/t10k-labels-idx1-ubyte --no-check-certificate\n",
        "!wget -NP ./datasets/MNIST_Data/test https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/t10k-images-idx3-ubyte --no-check-certificate\n",
        "!tree ./datasets/MNIST_Data"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "--2021-06-11 06:07:03--  https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/train-labels-idx1-ubyte\n",
            "Resolving mindspore-website.obs.myhuaweicloud.com (mindspore-website.obs.myhuaweicloud.com)... 49.4.112.3, 49.4.112.92, 49.4.112.91\n",
            "Connecting to mindspore-website.obs.myhuaweicloud.com (mindspore-website.obs.myhuaweicloud.com)|49.4.112.3|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 60008 (59K) [binary/octet-stream]\n",
            "Saving to: ‘./datasets/MNIST_Data/train/train-labels-idx1-ubyte’\n",
            "\n",
            "train-labels-idx1-u 100%[===================>]  58.60K  --.-KB/s    in 0.1s    \n",
            "\n",
            "2021-06-11 06:07:05 (464 KB/s) - ‘./datasets/MNIST_Data/train/train-labels-idx1-ubyte’ saved [60008/60008]\n",
            "\n",
            "--2021-06-11 06:07:05--  https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/train-images-idx3-ubyte\n",
            "Resolving mindspore-website.obs.myhuaweicloud.com (mindspore-website.obs.myhuaweicloud.com)... 49.4.112.3, 49.4.112.92, 49.4.112.91\n",
            "Connecting to mindspore-website.obs.myhuaweicloud.com (mindspore-website.obs.myhuaweicloud.com)|49.4.112.3|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 47040016 (45M) [binary/octet-stream]\n",
            "Saving to: ‘./datasets/MNIST_Data/train/train-images-idx3-ubyte’\n",
            "\n",
            "train-images-idx3-u 100%[===================>]  44.86M  31.1MB/s    in 1.4s    \n",
            "\n",
            "2021-06-11 06:07:07 (31.1 MB/s) - ‘./datasets/MNIST_Data/train/train-images-idx3-ubyte’ saved [47040016/47040016]\n",
            "\n",
            "--2021-06-11 06:07:07--  https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/t10k-labels-idx1-ubyte\n",
            "Resolving mindspore-website.obs.myhuaweicloud.com (mindspore-website.obs.myhuaweicloud.com)... 49.4.112.3, 49.4.112.92, 49.4.112.91\n",
            "Connecting to mindspore-website.obs.myhuaweicloud.com (mindspore-website.obs.myhuaweicloud.com)|49.4.112.3|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 10008 (9.8K) [binary/octet-stream]\n",
            "Saving to: ‘./datasets/MNIST_Data/test/t10k-labels-idx1-ubyte’\n",
            "\n",
            "t10k-labels-idx1-ub 100%[===================>]   9.77K  --.-KB/s    in 0s      \n",
            "\n",
            "2021-06-11 06:07:07 (145 MB/s) - ‘./datasets/MNIST_Data/test/t10k-labels-idx1-ubyte’ saved [10008/10008]\n",
            "\n",
            "--2021-06-11 06:07:07--  https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/mnist/t10k-images-idx3-ubyte\n",
            "Resolving mindspore-website.obs.myhuaweicloud.com (mindspore-website.obs.myhuaweicloud.com)... 49.4.112.3, 49.4.112.92, 49.4.112.91\n",
            "Connecting to mindspore-website.obs.myhuaweicloud.com (mindspore-website.obs.myhuaweicloud.com)|49.4.112.3|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 7840016 (7.5M) [binary/octet-stream]\n",
            "Saving to: ‘./datasets/MNIST_Data/test/t10k-images-idx3-ubyte’\n",
            "\n",
            "t10k-images-idx3-ub 100%[===================>]   7.48M  13.7MB/s    in 0.5s    \n",
            "\n",
            "2021-06-11 06:07:08 (13.7 MB/s) - ‘./datasets/MNIST_Data/test/t10k-images-idx3-ubyte’ saved [7840016/7840016]\n",
            "\n",
            "/bin/bash: tree: command not found\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 348
        },
        "id": "_CnHSo0dPVSQ",
        "outputId": "5e03fc3c-0d5a-4bcc-b9ba-26f8acb0fff9"
      },
      "source": [
        "import os\n",
        "from mindspore import context\n",
        "context.set_context(mode=context.GRAPH_MODE, device_target=\"CPU\")\n",
        "import matplotlib.pyplot as plt\n",
        "import matplotlib\n",
        "import numpy as np\n",
        "import mindspore.dataset as ds\n",
        "\n",
        "train_data_path = \"./datasets/MNIST_Data/train\"\n",
        "test_data_path = \"./datasets/MNIST_Data/test\"\n",
        "ds.config.set_num_parallel_workers(1)\n",
        "mnist_ds = ds.MnistDataset(train_data_path)\n",
        "print('The type of mnist_ds:', type(mnist_ds))\n",
        "# print(\"Number of pictures contained in the mnist_ds：\", mnist_ds.get_dataset_size())\n",
        "\n",
        "dic_ds = mnist_ds.create_dict_iterator()\n",
        "item = next(dic_ds)\n",
        "img = item[\"image\"].asnumpy()\n",
        "label = item[\"label\"].asnumpy()\n",
        "\n",
        "print(\"The item of mnist_ds:\", item.keys())\n",
        "print(\"Tensor of image in item:\", img.shape)\n",
        "print(\"The label of item:\", label)\n",
        "\n",
        "plt.imshow(np.squeeze(img))\n",
        "plt.title(\"number:%s\"% item[\"label\"].asnumpy())\n",
        "plt.show()\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "The type of mnist_ds: <class 'mindspore.dataset.engine.datasets.MnistDataset'>\n",
            "The item of mnist_ds: dict_keys(['image', 'label'])\n",
            "Tensor of image in item: (28, 28, 1)\n",
            "The label of item: 0\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "mv48Y53PPkAH",
        "outputId": "b26704b3-c189-456a-b12d-6352bdddc024"
      },
      "source": [
        "import mindspore.dataset.vision.c_transforms as CV\n",
        "import mindspore.dataset.transforms.c_transforms as C\n",
        "from mindspore.dataset.vision import Inter\n",
        "from mindspore import dtype as mstype\n",
        "\n",
        "\n",
        "def create_dataset(data_path, batch_size=32, repeat_size=1,\n",
        "                   num_parallel_workers=1):\n",
        "    \"\"\"\n",
        "    create dataset for train or test\n",
        "\n",
        "    Args:\n",
        "        data_path (str): Data path\n",
        "        batch_size (int): The number of data records in each group\n",
        "        repeat_size (int): The number of replicated data records\n",
        "        num_parallel_workers (int): The number of parallel workers\n",
        "    \"\"\"\n",
        "    # define dataset\n",
        "    mnist_ds = ds.MnistDataset(data_path)\n",
        "\n",
        "    # define some parameters needed for data enhancement and rough justification\n",
        "    resize_height, resize_width = 32, 32\n",
        "    rescale = 1.0 / 255.0\n",
        "    shift = 0.0\n",
        "    rescale_nml = 1 / 0.3081\n",
        "    shift_nml = -1 * 0.1307 / 0.3081\n",
        "\n",
        "    # according to the parameters, generate the corresponding data enhancement method\n",
        "    resize_op = CV.Resize((resize_height, resize_width), interpolation=Inter.LINEAR)\n",
        "    rescale_nml_op = CV.Rescale(rescale_nml, shift_nml)\n",
        "    rescale_op = CV.Rescale(rescale, shift)\n",
        "    hwc2chw_op = CV.HWC2CHW()\n",
        "    type_cast_op = C.TypeCast(mstype.int32)\n",
        "\n",
        "    # using map to apply operations to a dataset\n",
        "    mnist_ds = mnist_ds.map(operations=type_cast_op, input_columns=\"label\", num_parallel_workers=num_parallel_workers)\n",
        "    mnist_ds = mnist_ds.map(operations=resize_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n",
        "    mnist_ds = mnist_ds.map(operations=rescale_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n",
        "    mnist_ds = mnist_ds.map(operations=rescale_nml_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n",
        "    mnist_ds = mnist_ds.map(operations=hwc2chw_op, input_columns=\"image\", num_parallel_workers=num_parallel_workers)\n",
        "\n",
        "    # process the generated dataset\n",
        "    buffer_size = 10000\n",
        "    mnist_ds = mnist_ds.shuffle(buffer_size=buffer_size)\n",
        "    mnist_ds = mnist_ds.batch(batch_size, drop_remainder=True)\n",
        "    mnist_ds = mnist_ds.repeat(repeat_size)\n",
        "\n",
        "    return mnist_ds\n",
        "\n",
        "ms_dataset = create_dataset(train_data_path)\n",
        "print('Number of groups in the dataset:', ms_dataset.get_dataset_size())\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Number of groups in the dataset: 1875\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TjZC89BqPpbZ",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "58d107e6-497e-4285-9913-e36b7439b8f4"
      },
      "source": [
        "data = next(ms_dataset.create_dict_iterator(output_numpy=True))\n",
        "images = data[\"image\"]\n",
        "labels = data[\"label\"]\n",
        "print('Tensor of image:', images.shape)\n",
        "print('Labels:', labels)\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Tensor of image: (32, 1, 32, 32)\n",
            "Labels: [0 1 8 6 9 3 7 8 8 7 9 7 8 1 1 3 6 9 1 4 4 0 3 7 8 5 8 7 9 9 9 7]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NH_L0BNgPr_f",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 253
        },
        "outputId": "df603937-de32-4281-b8c8-7956409028e8"
      },
      "source": [
        "count = 1\n",
        "for i in images:\n",
        "    plt.subplot(4, 8, count)\n",
        "    plt.imshow(np.squeeze(i))\n",
        "    plt.title('num:%s'%labels[count-1])\n",
        "    plt.xticks([])\n",
        "    count += 1\n",
        "    plt.axis(\"off\")\n",
        "plt.show()\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 32 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "IwWz6jHgPr0d",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "27d17cd1-e46f-4b77-b699-e040986a0266"
      },
      "source": [
        "import mindspore.nn as nn\n",
        "from mindspore.common.initializer import Normal\n",
        "\n",
        "class LeNet5(nn.Cell):\n",
        "    \"\"\"Lenet network structure.\"\"\"\n",
        "    # define the operator required\n",
        "    def __init__(self, num_class=10, num_channel=1):\n",
        "        super(LeNet5, self).__init__()\n",
        "        self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid')\n",
        "        self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid')\n",
        "        self.fc1 = nn.Dense(16 * 5 * 5, 120, weight_init=Normal(0.02))\n",
        "        self.fc2 = nn.Dense(120, 84, weight_init=Normal(0.02))\n",
        "        self.fc3 = nn.Dense(84, num_class, weight_init=Normal(0.02))\n",
        "        self.relu = nn.ReLU()\n",
        "        self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)\n",
        "        self.flatten = nn.Flatten()\n",
        "\n",
        "    # use the preceding operators to construct networks\n",
        "    def construct(self, x):\n",
        "        x = self.max_pool2d(self.relu(self.conv1(x)))\n",
        "        x = self.max_pool2d(self.relu(self.conv2(x)))\n",
        "        x = self.flatten(x)\n",
        "        x = self.relu(self.fc1(x))\n",
        "        x = self.relu(self.fc2(x))\n",
        "        x = self.fc3(x)\n",
        "        return x\n",
        "\n",
        "network = LeNet5()\n",
        "print(\"layer conv1:\", network.conv1)\n",
        "print(\"*\"*40)\n",
        "print(\"layer fc1:\", network.fc1)\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "layer conv1: Conv2d<input_channels=1, output_channels=6, kernel_size=(5, 5),stride=(1, 1),  pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=Falseweight_init=normal, bias_init=zeros, format=NCHW>\n",
            "****************************************\n",
            "layer fc1: Dense<input_channels=400, output_channels=120, has_bias=True>\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "zzoT3hAMPwtj"
      },
      "source": [
        "from mindspore.train.callback import Callback\n",
        "\n",
        "# custom callback function\n",
        "class StepLossAccInfo(Callback):\n",
        "    def __init__(self, model, eval_dataset, steps_loss, steps_eval):\n",
        "        self.model = model\n",
        "        self.eval_dataset = eval_dataset\n",
        "        self.steps_loss = steps_loss\n",
        "        self.steps_eval = steps_eval\n",
        "\n",
        "    def step_end(self, run_context):\n",
        "        cb_params = run_context.original_args()\n",
        "        cur_epoch = cb_params.cur_epoch_num\n",
        "        cur_step = (cur_epoch-1)*1875 + cb_params.cur_step_num\n",
        "        self.steps_loss[\"loss_value\"].append(str(cb_params.net_outputs))\n",
        "        self.steps_loss[\"step\"].append(str(cur_step))\n",
        "        if cur_step % 125 == 0:\n",
        "            acc = self.model.eval(self.eval_dataset, dataset_sink_mode=False)\n",
        "            self.steps_eval[\"step\"].append(cur_step)\n",
        "            self.steps_eval[\"acc\"].append(acc[\"Accuracy\"])\n"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3ltYgw1ZP1dW"
      },
      "source": [
        "import mindspore.nn as nn\n",
        "from mindspore.nn import SoftmaxCrossEntropyWithLogits\n",
        "\n",
        "lr = 0.01\n",
        "momentum = 0.9\n",
        "\n",
        "# create the network\n",
        "network = LeNet5()\n",
        "\n",
        "# define the optimizer\n",
        "net_opt = nn.Momentum(network.trainable_params(), lr, momentum)\n",
        "\n",
        "# define the loss function\n",
        "net_loss = SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')\n"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NOCHjUQmP3cA",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "2faa6f7b-c88d-462e-8d58-5b830a51b185"
      },
      "source": [
        "import os\n",
        "from mindspore import Tensor, Model\n",
        "from mindspore.train.callback import ModelCheckpoint, CheckpointConfig, LossMonitor\n",
        "from mindspore.nn import Accuracy\n",
        "\n",
        "epoch_size = 1\n",
        "mnist_path = \"./datasets/MNIST_Data\"\n",
        "model_path = \"./models/ckpt/mindspore_quick_start/\"\n",
        "\n",
        "repeat_size = 1\n",
        "ds_train = create_dataset(os.path.join(mnist_path, \"train\"), 32, repeat_size)\n",
        "eval_dataset = create_dataset(os.path.join(mnist_path, \"test\"), 32)\n",
        "\n",
        "# clean up old run files before in Linux\n",
        "os.system('rm -f {0}*.ckpt {0}*.meta {0}*.pb'.format(model_path))\n",
        "\n",
        "# define the model\n",
        "model = Model(network, net_loss, net_opt, metrics={\"Accuracy\": Accuracy()} )\n",
        "\n",
        "# save the network model and parameters for subsequence fine-tuning\n",
        "config_ck = CheckpointConfig(save_checkpoint_steps=375, keep_checkpoint_max=16)\n",
        "# group layers into an object with training and evaluation features\n",
        "ckpoint_cb = ModelCheckpoint(prefix=\"checkpoint_lenet\", directory=model_path, config=config_ck)\n",
        "\n",
        "steps_loss = {\"step\": [], \"loss_value\": []}\n",
        "steps_eval = {\"step\": [], \"acc\": []}\n",
        "# collect the steps,loss and accuracy information\n",
        "step_loss_acc_info = StepLossAccInfo(model , eval_dataset, steps_loss, steps_eval)\n",
        "\n",
        "model.train(epoch_size, ds_train, callbacks=[ckpoint_cb, LossMonitor(125), step_loss_acc_info], dataset_sink_mode=False)\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "epoch: 1 step: 125, loss is 2.2914593\n",
            "epoch: 1 step: 250, loss is 2.30042\n",
            "epoch: 1 step: 375, loss is 2.3152473\n",
            "epoch: 1 step: 500, loss is 2.296948\n",
            "epoch: 1 step: 625, loss is 2.3047383\n",
            "epoch: 1 step: 750, loss is 2.2963219\n",
            "epoch: 1 step: 875, loss is 0.8525531\n",
            "epoch: 1 step: 1000, loss is 0.31209344\n",
            "epoch: 1 step: 1125, loss is 0.33309656\n",
            "epoch: 1 step: 1250, loss is 0.109265946\n",
            "epoch: 1 step: 1375, loss is 0.4336956\n",
            "epoch: 1 step: 1500, loss is 0.18215585\n",
            "epoch: 1 step: 1625, loss is 0.05629556\n",
            "epoch: 1 step: 1750, loss is 0.21853495\n",
            "epoch: 1 step: 1875, loss is 0.012219317\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lWwVcpNUP6sx",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 295
        },
        "outputId": "344e467b-1e08-4971-b1cd-4a819a96d19e"
      },
      "source": [
        "steps = steps_loss[\"step\"]\n",
        "loss_value = steps_loss[\"loss_value\"]\n",
        "steps = list(map(int, steps))\n",
        "loss_value = list(map(float, loss_value))\n",
        "plt.plot(steps, loss_value, color=\"red\")\n",
        "plt.xlabel(\"Steps\")\n",
        "plt.ylabel(\"Loss_value\")\n",
        "plt.title(\"Change chart of model loss value\")\n",
        "plt.show()\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "oK3XErIgP_gz",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "9a9e54ac-3a0f-4320-d2fd-f416e21a3cf8"
      },
      "source": [
        "from mindspore import load_checkpoint, load_param_into_net\n",
        "\n",
        "# testing relate modules\n",
        "def test_net(network, model, mnist_path):\n",
        "    \"\"\"Define the evaluation method.\"\"\"\n",
        "    print(\"============== Starting Testing ==============\")\n",
        "    # load the saved model for evaluation\n",
        "    param_dict = load_checkpoint(\"./models/ckpt/mindspore_quick_start/checkpoint_lenet-1_1875.ckpt\")\n",
        "    # load parameter to the network\n",
        "    load_param_into_net(network, param_dict)\n",
        "    # load testing dataset\n",
        "    ds_eval = create_dataset(os.path.join(mnist_path, \"test\"))\n",
        "    acc = model.eval(ds_eval, dataset_sink_mode=False)\n",
        "    print(\"============== Accuracy:{} ==============\".format(acc))\n",
        "\n",
        "test_net(network, model, mnist_path)\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "============== Starting Testing ==============\n",
            "============== Accuracy:{'Accuracy': 0.9675480769230769} ==============\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bfCyu3rLQB5r",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 295
        },
        "outputId": "62f24584-bc84-4c01-b22f-711dbd7c7193"
      },
      "source": [
        "def eval_show(steps_eval):\n",
        "    plt.xlabel(\"step number\")\n",
        "    plt.ylabel(\"Model accuracy\")\n",
        "    plt.title(\"Model accuracy variation chart\")\n",
        "    plt.plot(steps_eval[\"step\"], steps_eval[\"acc\"], \"red\")\n",
        "    plt.show()\n",
        "\n",
        "eval_show(steps_eval)\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ljdPtw0DQGMk",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 421
        },
        "outputId": "29da2f4a-49d1-4c69-9647-d5b682ab87af"
      },
      "source": [
        "ds_test = create_dataset(test_data_path).create_dict_iterator()\n",
        "data = next(ds_test)\n",
        "images = data[\"image\"].asnumpy()\n",
        "labels = data[\"label\"].asnumpy()\n",
        "\n",
        "\n",
        "output = model.predict(Tensor(data['image']))\n",
        "pred = np.argmax(output.asnumpy(), axis=1)\n",
        "err_num = []\n",
        "index = 1\n",
        "for i in range(len(labels)):\n",
        "    plt.subplot(4, 8, i+1)\n",
        "    color = 'blue' if pred[i] == labels[i] else 'red'\n",
        "    plt.title(\"pre:{}\".format(pred[i]), color=color)\n",
        "    plt.imshow(np.squeeze(images[i]))\n",
        "    plt.axis(\"off\")\n",
        "    if color == 'red':\n",
        "        index = 0\n",
        "        print(\"Row {}, column {} is incorrectly identified as {}, the correct value should be {}\".format(int(i/8)+1, i%8+1, pred[i], labels[i]), '\\n')\n",
        "if index:\n",
        "    print(\"All the figures in this group are predicted correctly!\")\n",
        "print(pred, \"<--Predicted figures\")\n",
        "print(labels, \"<--The right number\")\n",
        "plt.show()\n"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Row 1, column 8 is incorrectly identified as 8, the correct value should be 3 \n",
            "\n",
            "Row 2, column 3 is incorrectly identified as 8, the correct value should be 4 \n",
            "\n",
            "Row 2, column 7 is incorrectly identified as 0, the correct value should be 2 \n",
            "\n",
            "Row 3, column 3 is incorrectly identified as 2, the correct value should be 3 \n",
            "\n",
            "[0 4 2 0 6 1 3 8 0 8 8 4 3 9 0 0 2 6 2 3 0 9 9 3 0 0 5 0 0 0 8 1] <--Predicted figures\n",
            "[0 4 2 0 6 1 3 3 0 8 4 4 3 9 2 0 2 6 3 3 0 9 9 3 0 0 5 0 0 0 8 1] <--The right number\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 32 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    }
  ]
}